﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace Demo.CommonBase.Exceptions
{
    public class AbstractException: Exception
    {
        private MethodBase methodBase;
        private Exception ex;
        public int ExceptionID { get; set; }
         /// <summary>
        /// Constructor de la clase.
        /// </summary>
        /// <param name="exceptionId">El id de la excepcion a ser procesada.</param>
        /// <param name="messageValues">Los valores del mensaje a ser reemplazados.</param>
        /// 
        public AbstractException(int exceptionId)
            :base() 
        {
            ExceptionID = exceptionId;
        }

        /// <summary>
        /// Constructor de la clase.
        /// </summary>
        /// <param name="exceptionId">El id de la excepcion a ser procesada.</param>
        /// <param name="messageValues">Los valores del mensaje a ser reemplazados.
        /// </param>
        /// <param name="innerException">La excepcion interna a ser envuelta.</param>
        /// <param name="extendedProperties">Las propiedades extendidas de la excepcion.
        /// </param>
        public AbstractException(int exceptionId, string message)
            : base(message)
        {
            ExceptionID = exceptionId;
        }

        /// <summary>
        /// Constructor de la clase.
        /// </summary>
        /// <param name="exceptionId">El id de la excepcion a ser procesada.</param>
        /// <param name="innerException">La excepcion interna a ser envuelta.</param>
        public AbstractException(int exceptionId, string message, Exception innerException)
            : base(message, innerException)
        {
            ExceptionID = exceptionId;
        }


        public AbstractException(MethodBase methodBase, Exception ex)
            : base(methodBase.Name, ex)
        {
            // TODO: Complete member initialization
            this.methodBase = methodBase;
            this.ex = ex;
        }
    }
}
